Type: concept
Confidence: 0.80
Created: 2026-04-25
Updated: 2026-04-25
Tags: 重构代码异味封装性AI工程

Feature Envy

概述

Feature Envy是耦合类代码异味的一种,指一个方法更多地访问其他类的数据而不是自己所在类的数据,表明该方法可能属于另一个类。

关键内容

  1. 特征识别
  2. 一个方法使用其他类的数据比自己类的数据更多
  3. 对另一个对象调用大量的getter方法
  4. 数据和行为分离
  5. 方法频繁访问其他对象的内部状态

  6. 负面影响

  7. 行为放在了错误的地方
  8. 封装性差
  9. 违反了面向对象设计原则
  10. 难以维护和理解
  11. 增加了类之间的耦合

  12. 典型示例: ``` // 重构前:方法访问另一个对象的数据过多 class Order { getDiscountedPrice(customer) { // 这里大量使用 customer 数据 if (customer.loyaltyYears > 5) { return this.price * customer.discountRate; } return this.price; } }

// 重构后:方法移到更合适的类 class Customer { getDiscountedPriceFor(price) { if (this.loyaltyYears > 5) { return price * this.discountRate; } return price; } } ```

  1. 重构策略
  2. Move Method:将方法移到更合适的类
  3. Move Field:将字段移到更合适的类
  4. Extract Method:先提取方法再移动

  5. 判断准则

  6. 观察方法主要操作哪个类的数据
  7. 如果方法更多地使用其他类的数据,考虑移动方法
  8. 遵循"数据和使用数据的行为应该在一起"的原则

来源

相关